<?php
/**
 * Created by Haima.
 * Author:Haima
 * QQ:228654416
 * Date: 2018/9/4
 * Time: 06:30
 */

namespace app\controllers;

use app\models\Article;
use app\models\Category;
use yii\web\Controller;

header("Content-Type: text/html;charset=utf-8");
class HomeController extends Controller
{
    //用属性的方法定义父模板
    //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
    public $layout = 'home';

    //查询
    //http://yii.com/?r=home/Index
    public function actionIndex()
    {
        $a= -1;
        dd(abs($a));

        //查一行 主键为2的
        // $data = Article::findOne(2); //返回abj
        // $data = Article::find()->where(['article_id' => 5])->one(); 返回abj
        //$data = Article::find()->asArray()->where(['article_id'=>1])->one(); //返回数组
        //查主键为2,3,5的 出来的是二维数据,里面有obj,
//         $data = Article::findAll([2, 3, 5]);  //返回array[0]->abj
//         vp($data[0]->toArray()); //可以获取0号下面的 属性值
//         vp($data[0]->attributes); //可以获取0号下面的 属性值
//         //循环出查出来的结果转为 array
//         $arr=[];
//         foreach($data as $k=>$v){
//             $arr[]=$v->attributes;
//         }
//         vp($arr);
//         die;

        //获取全部数据
        // $data = Article::find()->all(); //返回array[0]->abj
        //获取单条数据 article_id=5
        // $data = Article::find()->where(['article_id' => 5])->all();
        //article_id>3
        // $data = Article::find()->where(['>', 'article_id', 3])->all();
        // 2>=article<=5 在2-5之间的(包含2和5)
        // $data = Article::find()->where(['between', 'article_id', 2, 5])->all();
        // article_title like 唐诗三百案
        // $data = Article::find()->where(['like', 'article_title', '唐诗三百案'])->all();

        // 以数组的方式取出
        // $data = Article::find()->asArray()->all(); //返回array[0]['article_title']

        // 循环分段取出 以数组的方式 每次按三条取出
        // foreach (Article::find()->asArray()->batch(3) as $v) {
        //     // echo count($v) . '-';
        //     $data[] = $v;
        // }

        $data = Article::find()->asArray()->where(['article_id'=>3])->one();
        dd($data);
        die;
        //会自动加载父模板 D:\phpStudy\WWW\yii\views\layouts\home.php
        return $this->render('index');
    }

    //一对多关联查询
    public function actionRelatesearch(){
        //关联查询
        //查询方法一(查一行) 一维数组下的值是obj
        $category = Category::findOne(1); //查分类表里的数据 abj
//        $categoryarr = $category->attributes; //获取某一行的分类结果里的对象属性,array
        //查文章里的cid等于2的 拿上面的结果 $categoryarr['cid']=2 作为本次查询的条件
//        $article = Article::find()->asArray()->where(['cid'=>$categoryarr['cid']])->all();

        //使用模板里的方法
//        $articles = $category->getArticles(); //模型里要加->all()

        //这里是取的是$category下的属性articles,
        //它会调用__get方法,会自动调用getArticles()方法
        //模型里可以不加all(),会自动调用all()方法
        //这里是用category作关系主表的,所以模型要写在ategory模型里
        $articles = $category->articles; //效果同上面 $category->getArticles();
        dd($articles);
    }

    //一对一关联查询
    public function actionRelatesone()
    {
        //方法一,hasOne() 用查一条文章的结果去关系查它对应的分类信息,
//        $article = Article::findOne(1);
////        $category = $article->getCategory();
//
//        //这里是取的是$article下的属性category,
//        //它会调用__get方法,会自动调用getCategory()方法
//        //模型里可以不加one(),会自动调用one()方法
//        //这里是用article作关系主表的,所以模型要写在article模型里
//        $category = $article->category;
//        dd($category);

//        //方法二,with用多条文章的结果去关联查它对应的分类信息
          //这里是用article作关系主表的,所以模型要写在article模型里
        $articles = Article::find()->with('category')->asArray()->all();
        dd($articles);
    }

    //添加
    //http://yii.com/?r=home/Add
    public function actionAdd()
    {
        //插入
        $article = new Article;
        $article->article_title = '123123123';
        $article->num = 80;
        // $data = $article->insert(); //保存方法一
        $data = $article->save(); //保存方法二
        $id = $article->attributes['article_id']; //获取新插入的主键id

        dd($id);
        //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
        return $this->render('about');
        //不会自动加载父模板
        // return $this->renderpartial('about');
    }

    //修改
    //http://yii.com/?r=home/Edit
    public function actionEdit()
    {
        $article = Article::findOne(9);
        $article->article_title = '刘亦菲穿旗袍带仙气，赵丽颖穿旗袍优雅，她穿旗袍最有民国范';
        $article->num = 8;
//        $data = $article->update(); //修改方法一
        $data = $article->save(); //修改方法二
        dd($data);
        //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
        return $this->render('about');
        //不会自动加载父模板
        // return $this->renderpartial('about');
    }

    //修改点击量
    //http://yii.com/?r=home/click
    public function actionClick()
    {
        //num:要自加1的字段(步长可以设置为,如 2)  article:要修改的行号  返回受影响的行数
        $article = Article::updateAllCounters(['num'=>2],['article_id'=>9]);

        dd($article);die;
        //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
        return $this->render('about');
        //不会自动加载父模板
        // return $this->renderpartial('about');
    }

    //删除记录
    //http://yii.com/?r=home/del
    public function actionDel()
    {
        //查出要删除的记录行
//        方法一:(查一行,删一行)
//        $article = Article::findOne(15);
//        $res=$article->delete(); //返回受影响的行数int 1,如果没有这条记录,报错

//        方法二:(查一行,删一行)
//        $article = Article::find()->where(['article_id'=>14])->one();
//        $res=$article->delete(); //返回受影响的行数int 1,如果没有这条记录,报错

//        方法三:(查多行,删一行)
//        $article = Article::find()->where(['article_id'=>12])->all(); //数组下是一个对象
//        $res = $article[0]->delete();//删除0号单元下的行 返回受影响的行数int 1,如果没有这条记录,报错

        //方法四:(查多行,可以循删除查出来的结果)
//        $article = Article::find()->where(['>','article_id',9])->all(); //数组下是一个对象 查出多行
//        $res = $article[1]->delete();//删除某号单元下的行 返回受影响的行数int 1,如果没有这条记录,报错
//        dd($res);die;

        //方法五:不加条件删除所有
//        Article::deleteALL();

        //方法六:按条件删除一行 占位符要和表里的字段一致
        //返回受影响的行数int 1,如果没有这条记录,报错
//        $res=Article::deleteAll('article_id=:article_id',[':article_id'=>10]);

        //方法七:按条件删除多行 占位符要和表里的字段一致
        //删除>31的所有行 返回受影响的行数int 3,如果没有满足条件的,返回0,
//        $res=Article::deleteAll('article_id>:article_id',[':article_id'=>31]);
        //删除article_id>29 and num>100的所有行 返回受影响的行数int 3,如果没有满足条件的,返回0,
        $res=Article::deleteAll('article_id>:article_id and num<:num',[':article_id'=>9,'num'=>100]);

        dd($res);


        //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
        return $this->render('about');
        //不会自动加载父模板
        // return $this->renderpartial('about');
    }

    public function actionAbout()
    {
        //会自动加载D:\phpStudy\WWW\yii\views\layouts\home.php文件
        return $this->render('about');
        //不会自动加载父模板
        // return $this->renderpartial('about');
    }
}
